(function(jQuery) {
	jQuery.fn.listaModulos = function(options) {

	var defaults = {
		slideNum: true,
		autoStart: false,
		slideInterval: 3000
	};

	this.each(function() {

		var settings = jQuery.extend(defaults, options);
		jQuery(this).find('dl').addClass('modulo');



		jQuery.fn.setVariables = function() {
			dlWidth = jQuery(this).width();
			dlHeight = jQuery(this).height();
			dtWidth = jQuery(this).find('dt').outerHeight();
			if (jQuery.browser.msie){ dtWidth = $(this).find('dt').outerWidth();}
			dtHeight = dlHeight - (jQuery(this).find('dt').outerWidth()-jQuery(this).find('dt').width());
			slideTotal = jQuery(this).find('dt').size();
			ddWidth = dlWidth - (dtWidth*slideTotal) - (jQuery(this).find('dd').outerWidth(true)-jQuery(this).find('dd').width());
			ddHeight = dlHeight - (jQuery(this).find('dd').outerHeight(true)-jQuery(this).find('dd').height());
		};
		jQuery(this).setVariables();



		if (jQuery.browser.safari){ var dtTop = (dlHeight-dtWidth)/2; var dtOffset = -dtTop;  /* Safari and Chrome */ }
		if (jQuery.browser.mozilla){ var dtTop = dlHeight - 20; var dtOffset = - 20; /* FF */ }
		if (jQuery.browser.msie){ var dtTop = 0; var dtOffset = 0; /* IE */ }



		var f = 1;
		jQuery(this).find('dt').each(function(){
			jQuery(this).css({'width':dtHeight,'top':dtTop,'margin-left':dtOffset});
			if(settings.slideNum == true){
				jQuery('<span class="slide-number">'+0+f+'</span>').appendTo(this);
				if(jQuery.browser.msie){
					var slideNumLeft = parseInt(jQuery(this).find('.slide-number').css('left')) - 14;
					jQuery(this).find('.slide-number').css({'left': slideNumLeft})
					if(jQuery.browser.version == 6.0 || jQuery.browser.version == 7.0){
						jQuery(this).find('.slide-number').css({'bottom':'auto'});
					}
					if(jQuery.browser.version == 8.0){
					var slideNumTop = jQuery(this).find('.slide-number').css('bottom');
					var slideNumTopVal = parseInt(slideNumTop) + parseInt(jQuery(this).css('padding-top'))  - 12;
					jQuery(this).find('.slide-number').css({'bottom': slideNumTopVal});
					}
				} else {
					var slideNumTop = jQuery(this).find('.slide-number').css('bottom');
					var slideNumTopVal = parseInt(slideNumTop) + parseInt(jQuery(this).css('padding-top'));
					jQuery(this).find('.slide-number').css({'bottom': slideNumTopVal});
				}
			}
			f = f + 1;
		});

		if(jQuery(this).find('.ativo').size()) {
			jQuery(this).find('.ativo').next('dd').addClass('ativo');
		} else {
			jQuery(this).find('dt:first').addClass('ativo').next('dd').addClass('ativo');
		}

		jQuery(this).find('dt:first').css({'left':'0'}).next().css({'left':dtWidth});
		jQuery(this).find('dd').css({'width':ddWidth,'height':ddHeight});



		jQuery.fn.findativoSlide = function() {
				var i = 1;
				this.find('dt').each(function(){
				if(jQuery(this).hasClass('ativo')){
					ativoID = i; // ativo slide
				} else if (jQuery(this).hasClass('no-more-ativo')){
					noMoreativoID = i; // No more ativo slide
				}
				i = i + 1;
			});
		};

		jQuery.fn.calculateSlidePos = function() {
			var u = 2;
			jQuery(this).find('dt').not(':first').each(function(){
				var ativoDtPos = dtWidth*ativoID;
				if(u <= ativoID){
					var leftDtPos = dtWidth*(u-1);
					jQuery(this).animate({'left': leftDtPos});
					if(u < ativoID){ // If the item sits to the left of the ativo element
						jQuery(this).next().css({'left':leftDtPos+dtWidth});
					} else{ // If the item is the ativo one
						jQuery(this).next().animate({'left':ativoDtPos});
					}
				} else {
					var rightDtPos = dlWidth-(dtWidth*(slideTotal-u+1));
					jQuery(this).animate({'left': rightDtPos});
					var rightDdPos = rightDtPos+dtWidth;
					jQuery(this).next().animate({'left':rightDdPos});
				}
				u = u+ 1;
			});
			setTimeout( function() {
				jQuery('.modulo').find('dd').not('.ativo').each(function(){
					jQuery(this).css({'display':'none'});
				});
			}, 400);

		};

		jQuery.fn.activateSlide = function() {
			this.parent('dl').setVariables();
			this.parent('dl').find('dd').css({'display':'block'});
			this.parent('dl').find('dd.plus').removeClass('plus');
			this.parent('dl').find('.no-more-ativo').removeClass('no-more-ativo');
			this.parent('dl').find('.ativo').removeClass('ativo').addClass('no-more-ativo');
			this.addClass('ativo').next().addClass('ativo');
			this.parent('dl').findativoSlide();
			if(ativoID < noMoreativoID){
				this.parent('dl').find('dd.no-more-ativo').addClass('plus');
			}
			this.parent('dl').calculateSlidePos();
		};

		jQuery.fn.rotateSlides = function(slideInterval, timerInstance) {
			var accordianInstance = jQuery(this);
			timerInstance.value = setTimeout(function(){accordianInstance.rotateSlides(slideInterval, timerInstance);}, slideInterval);
			jQuery(this).findativoSlide();
			var totalSlides = jQuery(this).find('dt').size();
			var ativoSlide = ativoID;
			var newSlide = ativoSlide + 1;
			if (newSlide > totalSlides) newSlide = 1;
			jQuery(this).find('dt:eq(' + (newSlide-1) + ')').activateSlide();
		}



		function trackerObject() {this.value = null}
		var timerInstance = new trackerObject();

		jQuery(this).findativoSlide();
		jQuery(this).calculateSlidePos();

		if (settings.autoStart == true){
			var accordianInstance = jQuery(this);
			var interval = parseInt(settings.slideInterval);
			timerInstance.value = setTimeout(function(){
				accordianInstance.rotateSlides(interval, timerInstance);
				}, interval);
		}

		jQuery(this).find('dt').not('ativo').click(function(){
			jQuery(this).activateSlide();
			clearTimeout(timerInstance.value);
		});

		if (!(jQuery.browser.msie && jQuery.browser.version == 6.0)){
			jQuery('dt').hover(function(){
				jQuery(this).addClass('hover');
			}, function(){
				jQuery(this).removeClass('hover');
			});
		}
	});
	};
})(jQuery);